package org.posupe.pessoas;

import org.posupe.util.Endereco;

public abstract class Pessoa {
	private String nome;

	private Endereco endereco;

	private String email;

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public abstract String getCodigo();

	public abstract void setCodigo(String codigo);

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public boolean match(Pessoa pessoa) {
		boolean retorno = true;
		boolean retornoEndereco = true;

		if (pessoa.endereco != null
				&& (pessoa.endereco.getBairro() != null
						|| pessoa.endereco.getCep() != null
						|| pessoa.endereco.getCidade() != null
						|| pessoa.endereco.getComplemento() != null
						|| pessoa.endereco.getEstado() != null
						|| pessoa.endereco.getLogradouro() != null
						|| pessoa.endereco.getNumero() != null || pessoa.endereco
						.getPais() != null)
				&& (this.endereco.getBairro() != null
						|| this.endereco.getCep() != null
						|| this.endereco.getCidade() != null
						|| this.endereco.getComplemento() != null
						|| this.endereco.getEstado() != null
						|| this.endereco.getLogradouro() != null
						|| this.endereco.getNumero() != null || this.endereco
						.getPais() != null)) {
			retornoEndereco = this.endereco.match(pessoa.endereco);
		}

		if (pessoa != null && (pessoa.nome != null || pessoa.email != null)
				&& (this.email != null || this.nome != null)) {
			if (this.nome != null && pessoa.nome != null && retorno) {
				retorno = this.nome.contains(pessoa.nome) && retorno;
			}
			if (this.email != null && pessoa.email != null && retorno) {
				retorno = this.email.contains(pessoa.email);
			}
		} else {
			if (retornoEndereco == false) {
				retorno = false;
			} else {
				retorno = true;
			}
		}
		return retorno;

	}
}
